home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Game / A / AutoCruise.cpt / AutoCruise ƒ / Cruise.c < prev    next >
C/C++ Source or Header  |  1989-11-16  |  4KB  |  144 lines

  1. /* Cruise.c */
  2.  
  3. /*
  4.   Project Info ->    Code Resource, file creator 'rsed', type 'rsrc'
  5.                     Type: 'COOL'
  6.                     Custom Header option on   ( VERY IMPORTANT! )
  7.                     Attributes: 00
  8.                     
  9.                     Compile into file called 'Init.π.rsrc' to be 
  10.                     incorporated into the init half of the program.
  11.                     
  12.                     Use ResEdit to add a 'sysz' resource with the
  13.                     following data:
  14.                     
  15.                     00: 0000 010C
  16.                     
  17.                     This is the amount of system heap that I need
  18.                     to install everything.
  19. */
  20.  
  21. #include "Cruise.h"
  22.  
  23. main()
  24.     {
  25.     asm
  26.         {
  27.     MyBlockPtr:
  28.         dc.l    0
  29.         
  30.     Entry:
  31.         lea        @MyBlockPtr,a0
  32.         move.l    (a0),a0                /* Get Globals address */
  33.                 
  34.         move.l    d1,-(sp)            /* save d1        */
  35.         
  36.         tst.b    CrsrCouple            /* make sure coupling is on before we do things */
  37.         beq        @Exit
  38.         
  39.         
  40.         move.w    MTemp.h,d0        /* Get Delta horizontal */
  41.         sub.w    RawMouse.h,d0
  42.         add.w    OFFSET(crsrTaskVars,Velh)(a0),d0    /* add to vel.h */
  43.         move.w    d0,OFFSET(crsrTaskVars,Velh)(a0)
  44.         add.w    OFFSET(crsrTaskVars,Prevh)(a0),d0    /* add vel to position */
  45.         move.w    d0,d1        /* save a floating position */
  46.         asr.w    #3,d0        /* truncate to an integer    */
  47.         move.w    d0,RawMouse.h    /* move the mouse there    */
  48.         
  49.         /*
  50.          * The next bit is a tad weird.  If the mouse hits the edge of
  51.          * the screen, the Velv &Velh variables need to be limited.
  52.          * The easiest way to check for boundries is when the cursor
  53.          * hasn't moved inspite of our attempts to move it.
  54.          */
  55.         move.w    Mouse.h,d0
  56.         cmp.w    OFFSET(crsrTaskVars,PrevInth)(a0),d0
  57.         beq.s    @1        /* we're not moving, don't update tickcounter  */
  58.         
  59.         move.l    Ticks,OFFSET(crsrTaskVars,LastTimeh)(a0)
  60.         move.w    d0,OFFSET(crsrTaskVars,PrevInth)(a0)
  61.         
  62.        @1
  63.         move.w    d1,OFFSET(crsrTaskVars,Prevh)(a0)    /* remember for next pass */
  64.         
  65.         /*
  66.          * Now really test to see if the cursor is moving.  If 9
  67.          * ticks have elapsed since last movement, assume we've hit the
  68.          * wall and therefore should clip the velocity and re-sync the
  69.          * position.
  70.          */
  71.         move.l    OFFSET(crsrTaskVars,LastTimeh)(a0),d0
  72.         sub.l    Ticks,d0
  73.         cmp.w    #-9,d0
  74.         bge.s    @3
  75.         
  76.         move.l    Ticks,OFFSET(crsrTaskVars,LastTimeh)(a0)
  77.         clr.w    OFFSET(crsrTaskVars,Velh)(a0)        /* zero vel    */
  78.         move.w    Mouse.h,d0
  79.         move.w    d0,OFFSET(crsrTaskVars,PrevInth)(a0) /* sync int pos */
  80.         asl.w    #3,d0
  81.         move.w    d0,OFFSET(crsrTaskVars,Prevh)(a0)  /* sync float pos */
  82.         
  83.        @3
  84.         /*
  85.          * now do the same thing for the vertical coordinates.
  86.          */
  87.         move.w    MTemp.v,d0
  88.         sub.w    RawMouse.v,d0
  89.         add.w    OFFSET(crsrTaskVars,Velv)(a0),d0
  90.         move.w    d0,OFFSET(crsrTaskVars,Velv)(a0)
  91.         add.w    OFFSET(crsrTaskVars,Prevv)(a0),d0
  92.         move.w    d0,d1
  93.         asr.w    #3,d0
  94.         move.w    d0,RawMouse.v
  95.         
  96.         move.w    Mouse.v,d0
  97.         cmp.w    OFFSET(crsrTaskVars,PrevIntv)(a0),d0
  98.         beq.s    @2
  99.         
  100.         move.l    Ticks,OFFSET(crsrTaskVars,LastTimev)(a0)
  101.         move.w    d0,OFFSET(crsrTaskVars,PrevIntv)(a0)
  102.         
  103.        @2
  104.         move.w    d1,OFFSET(crsrTaskVars,Prevv)(a0)    /* remember for next pass */
  105.         
  106.         move.l    OFFSET(crsrTaskVars,LastTimev)(a0),d0
  107.         sub.l    Ticks,d0
  108.         cmp.w    #-9,d0
  109.         bge.s    @4
  110.         
  111.         move.l    Ticks,OFFSET(crsrTaskVars,LastTimev)(a0)
  112.         clr.w    OFFSET(crsrTaskVars,Velv)(a0)        /* zero vel    */
  113.         move.w    Mouse.v,d0
  114.         move.w    d0,OFFSET(crsrTaskVars,PrevIntv)(a0) /* sync int pos */
  115.         asl.w    #3,d0
  116.         move.w    d0,OFFSET(crsrTaskVars,Prevv)(a0)  /* sync float pos */
  117.         
  118.        @4
  119.         
  120.         /*
  121.          * The setting of CrsrNew effects Obscuring the cursor.  If CrsrNew
  122.          * is always forced high, then the cursor will not dissapear while
  123.          * you're typing.
  124.          */
  125.         move.l    RawMouse,d0        /* Get 'old'    */
  126.         cmp.l    MTemp,d0        /* Same as 'new'? */
  127.         beq.s    @Exit
  128.         move.l    d0,MTemp        /* Nope, move it */
  129.         move.b    #0xFF,CrsrNew
  130.         
  131.         /*
  132.          * Notice that MTemp=RawMouse.  This is done to avoid having the
  133.          * real jCrsrTask from extracting Delta info as I did and then
  134.          * scaling the results up.
  135.          */
  136.         
  137.        Exit:
  138.         move.l    (sp)+,d1
  139.         move.l    OFFSET(crsrTaskVars,OldCrsrTask)(a0),a0
  140.                                         /* get original routine */
  141.         jmp        (a0)            /* go there  */
  142.         }
  143.     }
  144.